﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ImobitechDao.Repositories
{
    public class ImovelRepository : BaseRepository<Imovel>, IImovelRepository
    {

        #region Implementação obrigatoria da classe base
        public ImovelRepository(ImobitechEntities context) : base(context) { }

        protected override string TableName
        {
            get { return "Imovel"; }
        }

        protected override string EntitySetName
        {
            get { return "Imovel"; }
        }
        #endregion

        public List<Imovel> getBusca(string cidade, string endereco, string[] bairro, int tipoImovel, string estado, int areaprivada, string nomeDono)
        {
            IQueryable<Imovel> busca = (from p in _context.Imovel
                                        select p).AsQueryable();

            if (!string.IsNullOrEmpty(cidade))
                busca = busca.Where(p => p.Cidade == cidade);

            if (!string.IsNullOrEmpty(estado))
                busca = busca.Where(p => p.Estado == estado);

            if (tipoImovel > 0)
                busca = busca.Where(p => p.Tipo_Imovel.Id == tipoImovel);

            if (bairro.Length > 0)
                for (int i = 0; i < bairro.Length; i++)
                    busca = busca.Where(p => bairro.Contains(p.Bairro));

            if (!string.IsNullOrEmpty(endereco))
                busca = busca.Where(p => p.Estado == estado);

            if (areaprivada > 0)
                busca = busca.Where(p => p.AreaPrivada == areaprivada);

            if (!string.IsNullOrEmpty(nomeDono))
                busca = busca.Where(p => p.Pessoa_Papel_Imovel.Where(t => t.Pessoa_Papel.Papel.Nome == "Dono").First().Pessoa_Papel.Pessoa.Name == nomeDono);

            //ObjectQuery oQuery = (ObjectQuery)busca;
            //string cmdSQL = oQuery.ToTraceString();
            return busca.ToList();
        }

        public Imovel getBusca(int id)
        {
            return (from p in _context.Imovel
                    where p.Id == id
                    select p).FirstOrDefault();
        }
    }
}